package cn.com.dcsgo.service;

import cn.com.dcsgo.domain.SysMenu;
import cn.com.dcsgo.dto.SysMenuAddDTO;
import cn.com.dcsgo.dto.SysMenuUpdateDTO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 针对表【sys_menu(菜单管理)】的数据库操作Service
 *
 * @author Dcsgo
 * @since 2025-09-22 15:09:11
 */
public interface SysMenuService extends IService<SysMenu> {

    /**
     * 根据用户ID查询菜单列表(具有层级关系)
     *
     * @param userId 用户ID
     * @return 菜单列表(具有层级关系)
     */
    List<SysMenu> getMenuListByUserId(Long userId);

    /**
     * 根据用户ID查询用户关联的菜单列表
     *
     * @param userId 用户ID
     * @return 用户关联的菜单列表（不具有层级关系，按PID和排序数升序排序）
     */
    List<SysMenu> getMenusByUserId(Long userId);

    /**
     * 新增菜单
     *
     * @param sysMenuAddDTO 新增菜单请求参数
     * @return 受影响行数
     */
    int save(SysMenuAddDTO sysMenuAddDTO);

    /**
     * 根据用户ID查询目录菜单列表(不包含按钮，不具有层级关系)
     *
     * @param userId 用户ID
     * @return 目录菜单列表(不包含按钮 ， 不具有层级关系 ， 按PID和排序数升序排序)
     */
    List<SysMenu> getDirectoryAndMenuListByUserId(Long userId);

    /**
     * 更新菜单
     *
     * @param sysMenuUpdateDTO 更新菜单请求参数
     * @return 受影响行数
     */
    int update(SysMenuUpdateDTO sysMenuUpdateDTO);

    /**
     * 根据菜单ID删除菜单，当菜单有子菜单时不允许删除
     * @param menuId 菜单ID
     * @return 受影响行数
     */
    int waryRemoveById(Long menuId);
}
